package com.c.util;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.thread.ThreadUtil;

public class CacheTest {
	/**
	 * 我记得是这样滴：如果设置了定时器，那会定时清理缓存中的过期值，但是如果不起动，那只有在get这个值得时候才检查过期并清理
	 * 不起动的结果是：有些值如果长时间不访问，会占用缓存的空间
	 */
	public static void main(String[] args) {
		TimedCache<String, String> timedCache = (TimedCache) CacheUtil.newTimedCache(DateUnit.SECOND.getMillis() * 3);
		// 实例化创建
		// TimedCache<String, String> timedCache = new TimedCache<String,
		// String>(DateUnit.SECOND.getMillis() * 3);
		timedCache.put("key1", "value1", 1);
		timedCache.put("key2", "value2", DateUnit.SECOND.getMillis() * 5);

		// 启动定时任务，每5毫秒秒检查一次过期
		timedCache.schedulePrune(5);

		// 等待5毫秒
		ThreadUtil.sleep(5);

		// 5毫秒后由于value2设置了5毫秒过期，因此只有value2被保留下来
		String value1 = timedCache.get("key1");// null
		String value2 = timedCache.get("key2");// null

		// 取消定时清理
		timedCache.cancelPruneSchedule();
	}

}
